﻿using Autofac;
using CoreWCF;
using CoreWCF.Configuration;
using CoreWCF.Description;
using Digitalmes.Services.Wcf;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Opc.Ua;
using System;


namespace Digitalmes.Extensions
{
    public static class WcfExtenstion
    {

        public static void AddWcfService(this IServiceCollection services)
        {

            services.AddServiceModelServices(); // 添加必要的 CoreWCF 服务
            services.AddServiceModelMetadata(); // 如果需要元数据，则添加
            services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>(); // 同上
        }


        public static void UseWcfService(this IApplicationBuilder app)
        {
            var binding = new BasicHttpBinding
            {
                MaxBufferSize = int.MaxValue,
                MaxReceivedMessageSize = int.MaxValue,
                ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max
            };
            // 3. 使用 CoreWCF 中间件来映射 WCF 终结点
            app.UseServiceModel(bld =>
            {
                // 配置我们的服务终结点
                bld.AddService<WcfService>(); // 告知 CoreWCF 我们的服务类型
                // 配置一个使用 BasicHttpBinding 的终结点
                bld.AddServiceEndpoint<WcfService, IWcfService>(
                     binding, // 使用基本HTTP绑定，兼容性强
                    "/IWcfService/WcfService.svc" // 服务的访问路径
                );
                ////(可选)配置元数据交换终结点(MEX)，方便生成客户端代理
                // bld.AddServiceEndpoint<IMetadataService, IMetadataService>(new BasicHttpBinding(), "/MyWcfService/mex");
            });

            // 启用元数据交换
            var serviceMetadataBehavior = app.ApplicationServices.GetRequiredService<ServiceMetadataBehavior>();
            serviceMetadataBehavior.HttpGetEnabled = true;
            serviceMetadataBehavior.HttpsGetEnabled = true;
        }


        public static void UseWcfService(this IHost container)
        {

        }

    }
}
